package cn.demoncat.util.web.config;

import cn.demoncat.util.web.AppUtil;
import cn.demoncat.util.web.IpUtil;
import cn.demoncat.util.web.constant.AppConstant.Active;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

/**
 * 应用配置
 * 
 * @author 延晓磊
 *
 * @since 2020年8月3日
 */
@Component
public class AppProperties {

	// 运行环境
	@Value("${spring.profiles.active}")
	private String active;
	// 服务IP（IpUtil.LOCAL_IP）
	private String ip;
	// 服务端口
	@Value("${server.port}")
	private Integer port;
	// 服务ID（截取port后三位）
	private String id;
	// 服务名称
	@Value("${spring.application.name}")
	private String name;
	// 服务隔离名称（多个系统，共用Redis,Kafka等存储服务时，通过添加前缀来隔离）
	@Value("${spring.application.isolator:}")
	private String isolator;
	// 应用名称（配置文件需转为Unicode以防中文乱码）
	@Value("${app.name:}")
	private String app;
	// 应用归属人（企业）
	@Value("${app.owner:}")
	private String owner;

	/**
	 * 运行环境
	 * 
	 * @return
	 * 
	 * @author 延晓磊
	 *
	 * @since 2020年8月3日
	 */
	public String getActive() {
		return active;
	}

	/**
	 * 是否为生产环境
	 * 
	 * @return
	 * 
	 * @author 延晓磊
	 *
	 * @since 2020年8月4日
	 */
	public boolean isProd() {
		return Active.isProd(active);
	}

	/**
	 * 服务IP
	 *
	 * @return
	 *
	 * @author 延晓磊
	 *
	 * @since 2020年8月3日
	 */
	public String getIp() {
		if (ip == null) {
			ip = IpUtil.LOCAL_IP;
		}
		return ip;
	}

	/**
	 * 服务端口
	 *
	 * @return
	 *
	 * @author 延晓磊
	 *
	 * @since 2020年8月3日
	 */
	public Integer getPort() {
		return port;
	}

	/**
	 * 服务ID
	 *
	 * @return
	 *
	 * @author 延晓磊
	 *
	 * @since 2020年8月3日
	 */
	public String getId(){
		if (id == null) {
			id = AppUtil.toAppId(port);
		}
		return id;
	}

	/**
	 * 服务名称
	 * 
	 * @return
	 * 
	 * @author 延晓磊
	 *
	 * @since 2020年8月3日
	 */
	public String getName() {
		return name;
	}

	/**
	 * 服务隔离名称
	 *
	 * 注：相同服务名的多组项目（同一套代码，部署给不同的客户），共享存储服务时，每组项目配置不同的isolator，实例数据隔离
	 *
	 * @return
	 *
	 * @author 延晓磊
	 * @since 2023年04月23日
	 */
	public String getIsolator() {
		return isolator;
	}

	/**
	 * 设置服务隔离名称
	 *
	 * 场景：如果设置时间优先于调用时间，可以在初始化时设置（CommandLineRunner.run）
	 *
	 * @param isolator
	 *
	 * @author 延晓磊
	 * @since 2023年04月23日
	 */
	public void setIsolator(String isolator) {
		this.isolator = isolator;
	}

	/**
	 * 应用名称
	 *
	 * @return
	 *
	 * @author 延晓磊
	 * @since 2024年06月19日
	 */
	public String getApp(){
		return this.app;
	}

	/**
	 * 应用归属人（企业）
	 *
	 * @return
	 *
	 * @author 延晓磊
	 * @since 2024年06月19日
	 */
	public String getOwner(){
		return this.owner;
	}
}
